Правила со сценариями
В этом разделе:
О правилах со сценариями
Правила со сценариями позволяют создавать особые правила с использованием Windows PowerShell или сценариев VB. Успех или неудача работы сценария определяет, относятся ли к пользователю уровень безопасности, разрешенные и запрещенные элементы, которые являются частью правила.
Правила со сценариями могут использовать преимущества любого интерфейса, доступного с помощью PowerShell или VBScript, например COM (Component Object Model).
Каждый сценарий оценивается в соответствии со следующими условиями:
- Во время развертывания на компьютере новой конфигурации.
- Во время входа пользователя.
Для создания или редактирования сценариев перейдите к набору правил со сценариями в редакторе конфигураций Управление приложениями. Наборы правил > Со сценарием > [Имя набора правил]
Вы можете указать время запуска сценария, используя следующие параметры правил со сценариями:
- Выполнить сценарий:
- В сеансе как пользователь - сценарий выполняется во время входа каждого пользователя. Настройки применяются только на время сеанса пользователя.
- В сеансе как SYSTEM - сценарий использует разрешения учетной записи SYSTEM после каждого входа пользователя. Настройки применяются только на время сеанса пользователя.
- На компьютере как SYSTEM - сценарий использует разрешение учетной записи SYSTEM после запуска компьютера. Настройки применяются ко всем сеансам пользователей до перезагрузки компьютера, во время которой агент Управление приложениями также будет перезапущен или выполнено изменение конфигурации.
- Ожидать входа для выполнения - выберите для предотвращения выполнения сценария до завершения входа пользователя.
Внимание: Запуск сценариев от имени пользователя SYSTEM может привести к серьезным неполадкам в вашем компьютере и должен использоваться только опытными авторами сценариев.
VBScripts
Каждый сценарий выполняется в рамках программы запуска сценариев, что позволяет лучше контролировать их выполнение наряду с обеспечением высокого уровня входного и выходного управления.
- Файл VBS не используется.
- Отдельный процесс не создается.
Сценарий должен быть написан как функция и может содержать множество других функций, среди которых необходимо указать начальную. Запуск функции выполняется агентом Управление приложениями и может использоваться для вызова других функций.
Объект AMScriptRule COM встроен в программу сценариев и обеспечивает доступ к следующим методам:
strUsername = AMScriptRule.UserName
strUserdomain = AMScriptRule.UserDomain
strSessionid = AMScriptRule.SessionID
strStationname = AMScriptRule.WinStation
Стандарт Microsoft в данном случае означает, что WinStation возвращает значение имени сеанса служб терминалов, определяемое типом сеанса с обычными значениями 'Console' или 'RDP-Tcp#34' вместо имени рабочей станции Windows, которое обычно имеет значение WinSta0.
Объект AMScriptRule COM также содержит следующие методы:
strLog = AMScriptRule.Log "Запись моего журнала"
Разрешает вам отображать строки журнала агента для использования правил сценариев отладки.
strEnvironmentvar = AMScriptRule.ExpandEnvironment ("%MyEnvironmentVariables%")
Разворачивает переменные для пользователя, выполняющего сценарий.
Использование оболочки WScript. для расширения переменных среды возвращает только переменные SYSTEM.
Сценарии Windows PowerShell
Если сценарий завершится со значением 0, это значит все правила были успешно применены. Если будет возвращено любое, отличное от нуля, значение, сценарий завершился с ошибкой, и правила применены не будут.
Каждый сценарий PowerShell выполняется в экземпляре PowerShell.exe и, поскольку Управление приложениями не применяет и не добавляет каких-либо конкретных синтаксических элементов, будут работать все правильно созданные сценарии PowerShell.
ПО PowerShell должно быть установлено на любых конечных системах, которые используются для запуска сценария.
Примеры сценариев
В следующем сценарии VBScript демонстрируется управление приложениями, к которым у пользователя есть доступ.
Function ScriptedRule()
’Name of Filter scan expected to pass
ExpectedFilter = "FWALL"
’Get Server Name
Set objNTinfo = CreateObject ("WinNTSystemInfo")
ServerName = lcase (objNTInfo.ComputerName)
’Set initial return value
ScriptedRule = False
’Create MetaFrame Session Object
Set MFSession = Createobject ("MetaFrameCOM.MetaFrameSession")
’Initialize the session filters for this session
For Each x in MFSession.SmartAccessFilters
’return true if our filter is found
If x = ExpectedFilter Then
ScriptedRule=True
AMScriptRule.Log "SmartAccessFilter match found."
End If
Next
End Function
Следующий сценарий VBscript может использоваться для определения наличия компьютера в организационном подразделении "Компьютер":
Function ScriptedRule()
ScriptedRule = vbFalse
strCompName = AMScriptRule.StationName
Set oRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = oRootDSE.Get("DefaultNamingContext")
Set oOU = GetObject("LDAP://OU=TheOUyouAreSearching,OU=Parent,OU=Parent," & strDNSDomain)
oOU.GetInfo
For each member in oOU
If UCase(strCompName) = UCase(member.CN) Then
ScriptedRule = vbTrue
Exit For
End If
Next
End Function
В следующем примере VBScript показаны основные компоненты сценария и то, как получить доступ к информации об имени пользователя в системе и сопоставить его с конкретным доменом и организационным подразделением:
Function MyScript()
'Get the username of the user logging in (also works when running as SYSTEM)
strUserName = AMScriptRule.UserName
'Get the domain of the user logging in (also works when running as SYSTEM)
strUserDomain = AMScriptRule.UserDomain
'Look up user environment variables (when running as SYSTEM, only SYSTEM variables are available)
strClientName = AMScriptRule.ExpandEnvironment ("%ClientName%")
'Log the output
AMScriptRule.Log strUserName & " logged in on " & strClientName
'Check if the user is a member of the domain
If strUserdomain = "MyDomain" Then
'If so, see if the user is in the MyOU OU
Set objOU = GetObject ("LDAP://ou=MyOU,dc=MyDomain,dc=com")
objOU.Filter = Array("user")
For Each objUser In objOU
'Check if there is a match with the user logging on
If objUser.sAMAccountName = strUserName Then
'if there is, then set the function to True
MyScript = True
End If
Next
End If
'Unless there is a username match, the function defaults to False
End Function
В следующем примере Windows PowerShell показаны основные компоненты сценария и то, как получить доступ к информации об имени пользователя в системе и сопоставить его с конкретным доменом и организационным подразделением:
#Script checks if the current user is a member of the OU specified
# Return 0 if TRUE
# 1 otherwise
$logonuser = $env:username
$bindpt = [adsi] "LDAP://OU=TS_Users,OU=Users,OU=MyUser,OU=MyOU,DC=MyDomain,DC=com"
$users = New-Object System.DirectoryServices.DirectorySearcher $bindpt
$users.Filter = "(&(objectClass=User)(sAMAccountName=$logonuser))"
$obj = $users.FindOne()
if($obj -eq $null)
{
#" Not a Member"
exit 1
}